package br.com.controleVendas.controller;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;

import br.com.controleVendas.config.HibernateUtil;
import br.com.controleVendas.dao.ProdutoDao;
import br.com.controleVendas.entity.ProdutoDto;

@ManagedBean(name = "produtoCtrl")
@ViewScoped
public class ProdutoController
{

    List<ProdutoDto>   list = new ArrayList<>();

    private ProdutoDto produto;

    ProdutoDao         dao  = null;

    public ProdutoController() throws Exception
    {
        dao = HibernateUtil.getInstance().getProdutoDao();

        novo();

        atualizaListagem();
    }

    public void novo()
    {
        this.produto = new ProdutoDto();
    }

    public void atualizaListagem()
        throws Exception
    {
        list = dao.getList(new ProdutoDto());
        RequestContext.getCurrentInstance().update(":formProdutoListar");
    }

    public void setEditar(ProdutoDto produtoDto)
        throws Exception
    {
        this.produto = new ProdutoDto();
        this.produto.setCdId(produtoDto.getCdId());
        this.produto = dao.getOne(this.produto);

        RequestContext.getCurrentInstance().update(":formProdutoEditar");
    }

    public void salvar(ActionEvent event)
    {
        try
        {
            produto.setFlAtivo(true);
            produto = dao.salvar(produto);
            setEditar(produto);
            atualizaListagem();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Salvo com sucesso"));
        RequestContext.getCurrentInstance().update(":formProdutoEditar:messages");

    }

    public void setAlterarStatus(ProdutoDto produto)
    {
        try
        {
            produto.setFlAtivo(!produto.getFlAtivo());
            dao.salvar(produto);
            atualizaListagem();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
    
    public List<ProdutoDto> getList()
    {
        return list;
    }

    public ProdutoDto getProduto()
    {
        return produto;
    }

    public void setProduto(ProdutoDto produto)
    {
        this.produto = produto;
    }

}
